/**
 * 移动实体功能类demo案例
 */

import * as Cesium from "cesium";
import * as EasyCesium from "@xhymf1992/easy-cesium";

export async function functionMoveEntity() {

    // /**
    //  * 移动模型
    //  * step1: 先创建模型实体，初始坐标可任意
    //  * step2: 构建移动实体功能类，传入要移动的实体对象
    //  * step3: 按功能类的操作说明移动实体
    //  */
    // let image = await Cesium.Resource.fetchImage({
    //     url: "https://hz.gridworld.com.cn:50443/te3/di/get_file/location.png/"
    // })

    // let position = Cesium.Cartesian3.fromDegrees(120, 30, 1000);
        
    // let options = {
    //     id: "model-entity", // entity对象id，具有唯一性，必填
    //     name: "model-entity", // entity的名称，可选，默认为空
    //     show: true, // 是否显示，可选，默认显示
    //     heading: 0, // 绕局部坐标系(X轴朝向正东，Y轴朝向正北，Z轴朝向垂直地表向上)Z轴顺时针旋转角度(弧度制)，可选，默认为0
    //     pitch: 0, // 绕局部坐标系(X轴朝向正东，Y轴朝向正北，Z轴朝向垂直地表向上)Y轴顺时针旋转角度(弧度制)，可选，默认为0，朝向正北
    //     roll: 0, // 绕局部坐标系(X轴朝向正东，Y轴朝向正北，Z轴朝向垂直地表向上)X轴逆时针旋转角度(弧度制)，可选，默认为0
    //     position: position, // 模型坐标，必填
    //     uri: "https://hz.gridworld.com.cn:50443/te3/di/get_file/Cesium_Man.glb/", // 模型链接，必选
    //     scale: 1, // 模型缩放大小，可选，默认为1
    //     minimumPixelSize: 128, // 模型最小像素大小，可选，默认为0
    //     runAnimations: true, // 是否启动动画，可选，默认为true
    //     clampAnimations: true, // 在没有关键帧的持续时间内是否保持最后一个动作，可选，默认为true
    //     heightReference: 1, // 高程类型：0-海拔；1-贴在地表或3dtiles；2-相对于地表或3dtiles；3-贴在地表；4-相对于地表；5-贴在3dtiles；6-相对于3dtiles，可选，默认为0
    //     silhouetteColor: "rgba(255,0,0,1)", // 轮廓的颜色，可选，默认为红色
    //     silhouetteSize: 0.0, // 轮廓大小，可选，默认为0 (不显示轮廓)
    //     color: "rgba(255,255,255,1.0)", // 模型颜色，该颜色将与模型自身的颜色进行混合，可选，默认为白色
    //     colorBlendMode: 0, // 混合模式：0-高亮（颜色相乘）；1-替换（覆盖原有颜色）；2-比例混合. 可选，默认为0
    //     colorBlendAmount: 0.5, // 混合模式为2时，该值表示输入颜色的占比(0.0-1.0)，当为1时为覆盖. 可选，默认为0.5
    //     constant: true, // 是否是静态的，可选，默认为是，当为false时，参数变为时变类型，适用于经常变化的情况
    //     viewer: window.viewer // cesium视图对象，必填
    // };

    // // @ts-ignore
    // window.entity = new EasyCesium.ModelEntity(options);
    // window.entity.init();
    // window.entity.flyTo();


    /**
     * 移动标注
     * step1: 先创建标注实体，初始坐标可任意
     * step2: 构建移动实体功能类，传入要移动的实体对象
     * step3: 按功能类的操作说明移动实体
     */
    let image = await Cesium.Resource.fetchImage({
        url: "https://hz.gridworld.com.cn:50443/te3/di/get_file/location.png/"
    })

    let position = Cesium.Cartesian3.fromDegrees(120, 30, 1000);
    let options = {
        id: "label-entity", // entity对象id，具有唯一性，必填
        name: "label-entity", // entity的名称，可选，默认为空
        show: true, // 是否显示，可选，默认显示
        position: position, // 图标位置，必填

        image: image, // 图标数据，可选，默认为空
        imageShow: true, // 是否显示图标，可选，默认显示
        imageColor: "rgba(255,0,0,1)", // 图标的颜色，可选，默认为rgba(255, 255, 255, 1)
        imageScale: 1.0, // 图标的缩放值，可选，默认为1

        text: "位置", // 文本内容，可选，默认为空
        textShow: true, // 是否显示文本，可选，默认显示
        textColor: "rgba(0,255,0,1)", // 文本颜色，可选，默认为rgba(255, 255, 255, 1)
        textScale: 1.0, // 文本的缩放值，可选，默认为1
        textHorizontalOffset: 0, // 文本在屏幕中的水平像素偏移距离:[朝右，朝下]，可选，默认为0
        textVerticalOffset: 0, // 文本在屏幕中的垂直像素偏移距离:[朝右，朝下]，可选，默认为0

        distanceDisplayCondition: [0, 1e6], // 图元在该视角距离内可见，其他距离不可见：[near, far]，可选，默认不启用
        disableDepthTestDistance: 0, // 视角离标注的距离小于此值时关闭深度检测，可选，默认为0
        
        constant: true, // 是否是静态的，可选，默认为是，当为false时，参数变为时变类型，适用于制作动画
        viewer: window.viewer // cesium视图对象，必填
    };

    // @ts-ignore
    window.entity = new EasyCesium.LabelEntity(options);
    // @ts-ignore
    window.entity.init();
    // @ts-ignore
    window.entity.flyTo();

    
    //---------------------------------------


    /**
     * 操做说明：
     * 单击左键：确定实体坐标，无法移动实体
     * 移动鼠标：在未确定实体坐标前，将随鼠标移动实体
     * ctrl+z: 取消确定的实体坐标，可继续移动实体
     */
    // @ts-ignore
    window.func = new EasyCesium.FunctionMoveEntity({
        pickedPointShow: true, // 是否显示点中的点，可选，默认为true
        pickedPointColor: "rgba(255,255,0,1)", // 点的颜色，可选，默认为rgba(255, 0, 0, 1)
        pickedPointSize: 5, // 点的大小，可选，默认为10
        // @ts-ignore
        moveEntity: window.entity, // 要移动的实体，支持 CylinderEntity EllipseEntity EllipsoidEntity LabelEntity ModelEntity PointEntity
        viewer: window.viewer
    });
    // @ts-ignore
    window.func.init();

    // // 获取拾取到的地心坐标
    // console.log(window.func.getPickedPosition());

    // // 获取拾取到的经纬度坐标
    // console.log(window.func.getPickedPositionCarto());

    // // 销毁func
    // window.func.destroy();
}